<?php
namespace App\Common\Cla\ClaBase\Traits\Common\MagicGather;

use App\Common as com;

class MagicGatherApi extends com\Cla\ClaBase {
	/**
	 * MagicGather所在的this
	 * @var \App\Common\Cla\ClaBase\Traits\Common\MagicGather\MagicClassTemplate
	 */
	private $magicGatherThis = null;
	
	public function __construct( $magic_gather_this ){
		$this->magicGatherThis = $magic_gather_this;
	}
	
	/**
	 * 注册魔术方法事件
	 * @param string $magic_type 魔术方法类型
	 * @param string $callback_sid 回调sid
	 * @param \Closure $callback 回调
	 * @return int 添加结果。[0]添加失败 [1]添加成功
	 */
	public function registerMagicEvent( $magic_type, string $callback_sid, \Closure $callback ){
		return $this->magicGatherThis->_magicGatherApi( 'RegisterMagicEvent', [ $magic_type, $callback_sid, $callback ] );
	}
	
	/**
	 * 类方法是否存在
	 * @param str $method_name 方法名
	 * @return bool [false]不存在 [true]存在
	 */
	public function methodExists( $method_name ){
		return $this->magicGatherThis->_magicGatherApi( 'MethodExists', [ $method_name ] );
	}
	
	/**
	 * 调用类方法
	 * @param str $method_name 方法名
	 * @param array ...$args 方法参数
	 * @return mixed 方法返回值
	 */
	public function methodCall( $method_name, array $args = [] ){
		return $this->magicGatherThis->_magicGatherApi( 'MethodCall', [ $method_name, $args ] );
	}
	
	/**
	 * 检查属性是否存在
	 * @param str $property_name 属性名
	 * @return bool [false]不存在 [true]存在
	 */
	public function propertyExists( $property_name ){
		return $this->magicGatherThis->_magicGatherApi( 'PropertyExists', [ $property_name ] );
	}
	
	/**
	 * 检查属性是否设置（调用isset方法）
	 * @param str $property_name 属性名
	 * @return bool [false]不存在 [true]存在
	 */
	public function propertyIsset( $property_name ){
		return $this->magicGatherThis->_magicGatherApi( 'PropertyIsset', [ $property_name ] );
	}
	
	/**
	 * 获取属性值
	 * @param str $property_name 属性名
	 * @return mixed 属性值
	 */
	public function propertyGet( $property_name ){
		return $this->magicGatherThis->_magicGatherApi( 'PropertyGet', [ $property_name ] );
	}
	
	/**
	 * 设置属性值
	 * @param str $property_name 属性名
	 * @param mixed $value 属性值
	 * @return void
	 */
	public function propertySet( $property_name, $value ){
		return $this->magicGatherThis->_magicGatherApi( 'PropertySet', [ $property_name, $value ] );
	}
	
}
